home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs49.d81 / hack2-1.sfx / hack.1
Text File  |  1990-02-12  |  48KB  |  1,001 lines

  1.      ├├├├├├       ╚╚    ╚╚    ┴┴┴┴    ├├├├├ ╦╦  ╦╦ ╔╔╔╔╔╔ ╬╬   ╬╬  ╟╟╟╟
  2.     ├├   ====     ╚╚    ╚╚  ┴┴    ┴┴ ├├     ╦╦ ╦╦    ╔╔   ╬╬╬  ╬╬ ╟╟
  3.     ├├   ====     ╚╚    ╚╚  ┴┴    ┴┴ ├├     ╦╦╦╦     ╔╔   ╬╬ ╬╬╬╬ ╟╟
  4.     ├├            ╚╚╚╚╚╚╚╚  ┴┴    ┴┴ ├├     ╦╦╦╦     ╔╔   ╬╬ ╬╬╬╬ ╟╟ ╟╟╟
  5.     ├├   ====     ╚╚    ╚╚  ┴┴┴┴┴┴┴┴ ├├     ╦╦ ╦╦    ╔╔   ╬╬  ╬╬╬ ╟╟   ╟╟
  6.     ├├   ====     ╚╚    ╚╚  ┴┴    ┴┴ ├├     ╦╦ ╦╦    ╔╔   ╬╬   ╬╬ ╟╟   ╟╟
  7.      ├├├├├├       ╚╚    ╚╚  ┴┴    ┴┴  ├├├├├ ╦╦  ╦╦ ╔╔╔╔╔╔ ╬╬   ╬╬  ╟╟╟╟╟
  8.  
  9.                     ╓OLUME 1 - ╔SSUE 2 - ┴PRIL 22, 1992
  10. ==============================================================================
  11.  
  12. ┼DITOR'S ╬OTES:
  13. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  14.  
  15.     ┼EEGH! - ╫HEN ╔ FIRST STARTED THIS ╔ NEVER REALIZED HOW MUCH WORK IT'D BE.
  16. ╔'M GLAD OF THE RECEPTION IT'S GOTTEN FROM THE ├OMMODORE COMMUNITY AT LARGE. ╔'D
  17. LIKE TO THANK EACH OF THE AUTHOR'S IN THIS ISSUE AND LAST FOR THEIR WORK THEY'VE
  18. PUT INTO IT AS WELL AS THEIR TIME. 
  19.  
  20.   ╨LEASE NOTE THAT ALL FILES, DOCUMENTATION ETCETERA ASSOCIATED WITH ├= ╚ACKING
  21. AND WHATNOT CONTAINED WITHIN ARE ALSO NOW AVAILABLE AT TYBALT.CALTECH.EDU VIA
  22. ANONYMOUS FTP UNDER THE DIRECTORY /PUB/RKNOP/HACKING.MAG.  ┴NY UPDATES TO FILES
  23. CONTAINED WITHIN OR CORRECTIONS WILL BE POSTED THERE AS WELL AS MENTIONED
  24. HERE.  ├URRENTLY IT HAS THE CORRECT 1ST ISSUE AND (SOON TO BE) 2ND ISSUE. ┴LSO
  25. ╥OBERT ╦NOP'S FILE BMOVER.SFX IS THERE FOR THE ┬ANKING ╟EOS ARTICLE IN THIS
  26. ISSUE.
  27.  
  28.   ╔T SEEMS AS IF WE'RE AVERAGING ABOUT 2 MONTHS FOR EACH ISSUE AND HOPEFULLY 
  29. WE'LL KEEP THAT RATE DURING THE SUMMER BUT DUE TO AN INTERNSHIP (╔'LL HOPEFULLY
  30. GET) ╔ MAY NOT HAVE NET ACCESS DURING THE SUMMER.  ╔N THAT CASE IT'LL BE DELAYED
  31. UNTIL AFTER ╔ GET BACK TO SCHOOL IN THE FALL.
  32.  
  33.   ┴LSO, IF YOU'VE GOT ANY IDEAS FOR ARTICLES OR HAVE WRITTEN A PROGRAM THAT IS
  34. UNIQUE THAT YOU'D BE INTERESTED IN DOCUMENTING AND P'HAPS LETTING OTHER PEOPLE
  35. SEE SOME OF THE TRICKS OF THE TRADE THEN PLEASE SEND ANY QUERIES TO 
  36. DUCK@PEMBVAX1.PEMBROKE.EDU.  
  37.  
  38. ****************** ╫┴╥╬╔╬╟╙, ╒╨─┴╘┼╙, ┬╒╟ ╥┼╨╧╥╘╙, ┼╘├... *********************
  39.  
  40.   ╨LEASE NOTE THAT IN THE LAST ISSUE WHEN THE UNDOCUMENTED OPCODES WERE 
  41. DISCUSSED THAT THEY ARE _╓┼╥┘ ╬╧╬-╙╘┴╬─┴╥─_.  ┴ND ANY FUTURE ACCELERATOR BOARDS
  42. FOR THE ├=128 OR ├=64, IN ALL LIKELEHOOD, _WILL NOT WORK_. ┌IP'S BOARD [WHEN ARE
  43. THEY EVER GONNA FINISH IT?] FOR THE ├=128 WILL BE BASED ON A SIMILAIR PROCESSOR
  44. TO THE 8502 AND IS PRACTICALLY GUARENTEED NOT TO WORK WITH THE UNDOCUMENTED 
  45. OP-CODES.  ╔F YOU PLAN TO RELEASE ANY ═╠ PROGRAMS FOR GENERAL USE ╨╠┼┴╙┼ BE 
  46. AWARE THAT THEY MAY BE IN-COMPATIBLE WITH FUTURE SYSTEMS.
  47.  
  48. ============================================================================
  49.  
  50. ╬OTE: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN WHOLE,
  51.   FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL AUTHORS FOR 
  52.   PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY. 
  53.  
  54.   *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
  55.  
  56. ============================================================================
  57.  
  58.   ╔N THIS EDITION WE'VE GOT THE FOLLOWING ARTICLES:
  59.  
  60. ╠EARNING ═╠ - ╨ART 2
  61.  
  62.   ┘ES, THE INFAMOUS LEARNING MACHINE LANGAUGE TUTORS BY ├RAIG ╘AYLOR 
  63. (DUCK@PEMBVAX1.PEMBROKE.EDU).  ╔N THIS SESSION WE EXAMINE INDEXED ADDRESSING
  64. AND IT'S USEFULLNESS IN PRINTING STRINGS OF CHARACTERS.
  65.  
  66. 8563 : ┴N ╔N-─EPTH ╠OOK
  67.  
  68.   ╘HIS ARTICLE DOCUMENTS AND DETAILS THE 8563 IN-DEPTH.  ╔T COVERS ALL 
  69. AVAILABLE REGISTERS, DOCUMENTS THEIR FUNCTIONS AND SUGGESTED METHODS OF GETTING
  70. CERTAIN EFFECTS.  ┴LSO COVERS HOW TO READ AND WRITE TO 8563 REGISTERS AS WELL
  71. AS READ THE 16K OR 64K OF MEMORY THAT CONTAINS THE ╓─├ CHAR-SET, SCREEN MEMORY
  72. ETC. ╫RITTEN BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU).
  73.  
  74. ╘HE ╨OOR ═AN'S ╫AY TO ╟ETTING ╞ILES FROM ═╙-─OS ─ISKETTES
  75.  
  76.   ╬OW THERE'S A WAY TO TRANSFER FILES OF ANY LENGTH FROM ═╙-─OS DISKETTES USING
  77. A PUBLIC DOMAIN PROGRAM THAT WILL ONLY READ FILES OF 43K OR LESS AND A ╔┬═
  78. PROGRAM TO SPLIT THE FILES UP.  ╘HERE ARE BETTER WAYS, BUT IF YOU DON'T WANT
  79. TO PAY FOR ┬IG-┬LUE ╥EADER THIS IS ONE METHOD TO GO. ╫RITTEN BY ═ARK ╠AWRENCE
  80. (9152427─@╠EVELS.╒NI╙A.┼DU.┴U).
  81.  
  82. ┬ANKING ON ╟EOS
  83.  
  84.   ╟┼╧╙ 128, BEING AN EXTENDED AND EXPANDED VERSION OF ╟┼╧╙ 64, PROVIDES A 
  85. CONTIGUOUS BLOCK OF APPLICATION SPACE IN A SINGLE ╥┴═ BANK. ╘HE "STANDARD"
  86. PROGRAMMING DOCUMENTATION MAKES FEW REFERENCES TO THE USE OF OTHER BANKS IN 
  87. ╟┼╧╙. ╘HIS ARTICLE DESCRIBES ACCESSING OTHER ╥┴═ BANKS (INCLUDING ╥┴═ BANKS 2
  88. AND 3 FOR 256╦ EXPANDED 128'S) UNDER ╟┼╧╙128, USING BOTH THE ╟┼╧╙ ╦ERNAL
  89. ROUTINES AND MORE DIRECT METHODS.  ┬Y ╥OBERT ╦NOP (RKNOP@TYBALT.CALTECH.EDU).
  90.  
  91. ─YNAMIC ═EMORY ┴LLOCATION
  92.  
  93.   ╫RITTEN BY ├RAIG ┬RUCE (F2RX@JUPITER.SUN.CSD.UNB.CA) THIS ARTICLE EXAMINES
  94. HOW TO IMPLEMENT AND USE DYNAMICALLY ALLOCATED MEMORY THAT WILL ALLOW YOUR
  95. PROGRAMS TO BETTER UTILIZE ALL OF THE AVAILABLE MEMORY ON YOUR ├=128, INCLUDING
  96. EXPANSION MEMORY. ╘HESE ROUTINES ARE EXTRACTED FROM THE ┌ED-128 PROGRAM WHICH
  97. IS A TEXT EDITOR THAT CAN EDIT 600╦┬YTE FILES ON A 512╦ EXPANDED 128.
  98.  
  99. =============================================================================
  100.  
  101. ┬EGINNING ═╠ #2
  102. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  103.  
  104.   ╠AST TIME WE INTRODUCED THE DEFINITION OF WHAT EXACTLY ═ACHINE ╠ANGUAGE / 
  105. ┴SSEMBLY ╠ANGUAGE IS ALONG WITH AN EXAMPLE OF CLEARING THE SCREEN IN ═ACHINE
  106. ╠ANGUAGE.
  107.   ╬OW, IN THIS ISSUE LET'S PRINT MY NAME (AND LATER YOUR NAME).  ╠OOKING AT THE
  108. CODE FROM LAST TIME THE FOLLOWING ASSEMBLY SOURCE JUMPS TO MIND:
  109.  
  110. ------------ 
  111. PRINT_1.ASM:
  112.  
  113.           LDA #147         ; CLR/SCREEN CODE
  114.           JSR $FFD2        ; PRINT
  115.           LDA #'├'         ; CODE FOR ASCII "├"
  116.           JSR $FFD2        ; PRINT
  117.           LDA #'R'    
  118.           JSR $FFD2
  119.           LDA #'A'
  120.           JSR $FFD2
  121.           LDA #'I'
  122.           JSR $FFD2
  123.           LDA #'G'
  124.           JSR $FFD2
  125.           LDA #32          ; CODE FOR SPACE 
  126.           JSR $FFD2
  127.           LDA #'╘'         ; PRINT MY LAST NAME....
  128.           JSR $FFD2
  129.              .
  130.                .            (AD NASEUM...)    
  131.                  .        
  132.           RTS
  133. ----------
  134.  
  135.   ╬OW, FOR SHORT STRINGS LIKE "╚╔!" THAT MIGHT BE FINE BUT IF YOUR NAME IS 
  136. SOMETHING LIKE "╙EYMOUR ╩OHNSON THE THIRD" IT CAN GET A LITTLE BIT RIDICULOUS
  137. IN TERMS OF THE AMOUNT OF MEMORY AND THE AMOUNT OF TYPING (EEGH! - TYPING!) 
  138. INVOLVED. ╘HERE'S AN EASIER WAY.
  139.   
  140.   ╔T'S CALLED INDEXED ADDRESSING. ╫HAT IS THIS YOU SAY? ╠ET'S FIRST TAKE A 
  141. LOOK AT THE ABOVE PROGRAM USING INDEXED ADDRESSING AND THEN EXPLAIN IT.
  142.  
  143. ------------ 
  144. PRINT_2.ASM
  145.  
  146.           LDY #$00
  147.    LOOP   LDA STRING,Y
  148.           JSR $FFD2
  149.           INY
  150.           CPY #NUMCHARS
  151.           BNE LOOP
  152.           RTS
  153.  
  154.  STRING   .BYTE 147
  155.           .ASCII "├RAIG ╘AYLOR"
  156.  
  157.  NUMCHARS = *-STRING
  158.  
  159. ------------
  160.  
  161.   ╚MM, LOOKS A LITTLE BIT CONFUSING 'EH?
  162.  
  163.   ╫HAT WE'RE DOING IS USING THE REGISTER Y TO ACT AS A POINTER TO GRAB THE 
  164. Y'TH CHARACTER IN WHAT IS AT MEMORY LOCATION ╙╘╥╔╬╟. ╔F Y IS 0 THEN WE'LL GET
  165. STRING+0 WHICH HAPPENS TO BE A 147.
  166.  
  167.   ╘HE .BYTE AND .ASCII DIRECTIVES ARE NOT REAL INSTRUCTIONS THE COMPUTER
  168. UNDERSTANDS. ╫HAT HAPPENS IS THAT YOUR ASSEMBLER SEES THAT YOU WANT DATA
  169. PUT AT THOSE LOCATIONS SO IT CONVERT 147 AND "├RAIG ╘AYLOR" TO NUMBERS
  170. AND PUTS THEM AT THE PROPER LOCATIONS, RELIEVING YOU THE BURDEN OF DOING IT.
  171.  
  172.    ╘HE NUMCHARS = *-STRING LOOKS CONFUSING AT FIRST... OBVIOUSLY, NUMCHARS
  173. STANDS FOR THE NUMBER OF CHARACTERS WE NEED TO PRINT OUT BUT HOW IS IT BEING
  174. FIGURED?  ═OST ASSEMBLERS KEEP THE CURRENT LOCATION IN MEMORY IT'S ASSEMBLING
  175. TO IN SOMETHING CALLED A PROGRAM COUNTER OF ╨├.  ═OST ASSEMBLERS ALSO WILL LET
  176. YOU HAVE THE VALUE AT ASSEMBLY TIME BY REFERENCING IT USING THE "*" SYMBOL.
  177. "STRING" IS ALREADY A SYMBOL THAT HAS BEEN SET AN ADDRESS IN MEMORY AND AFTER
  178. ASSEMBLING THE .BYTE AND .ASCII INSTRUCTION "*" WILL BE EQUAL TO THE NEXT 
  179. ADDRESS THAT THE ASSEMBLER WOULD PUT ANY INSTRUCTIONS AT, HAD WE HAD ANY.
  180. ╬OW, *-STRING BASICALLY IS SAYING TO THE COMPILER, LOOK, TAKE THE CURRENT 
  181. PROGRAM COUNTER (WHERE IT'S ASSEMBLING TO) AND SUBTRACT IT FROM WHERE THE 
  182. SYMBOL STRING STARTS AT (WHICH IT JUST ASSEMBLED A WHILE BACK). ╘HIS SHOULD
  183. BE THEN, OUR NUMBER OF CHARACTERS WE HAVE.
  184.  
  185. ╫┴╠╦-╘╚╥╧╒╟╚:
  186.  
  187.   ╥EGISTER ┘ IS INITIALLY SET TO ZERO IN THE FIRST INSTRUCTION, AS WE WANT TO
  188. BEGIN WITH THE FIRST CHARACTER. ╘HE FIRST CHARACTER IS AT STRING+0, NOT 
  189. STRING+1. ╘HIS MAY SEEM A LITTLE BIT ODD AT FIRST, BUT TRY THINKING OF IT THIS
  190. WAY:
  191.  
  192.      ╘AKE, FOR EXAMPLE, 3 DISKETTES. ╨UT THEM IN A ROW AND CALL THE ONE ON THE
  193.      LEFT "STRING" (OR SOME OTHER NAME). ╘HEN POINT AT "STRING+1", "STRING+2"..
  194.      ╬OTICE THERE'S NO "STRING+3" EVEN THO' THERE'S 3 DISKETTES?  ╘HIS MAY 
  195.      SEEM A LITTLE BIT STRANGE AT FIRST, BUT AFTER THINKING ABOUT IT A WHILE
  196.      YOU'LL BEGIN TO UNDERSTAND. ╔N MACHINE / ASSEMBLY LANGUAGE, YOU TYPICALLY
  197.      COUNT STARTING FROM ZERO, IN THE REAL WORLD, TYPICALLY FROM ONE.
  198.  
  199.   ╘HE LDA STRING,Y INSTRUCTION IS TELLING THE COMPUTER TO REFERENCE STRING AS 
  200. IF IT WAS AN ARRAY, GET THE BYTE AT LOCATION STRING + Y, OR FOR YOU BASIC
  201. PROGRAMMERS THINKING OF STRING AS AN ARRAY OF BYTES (WITH NO BOUNDS CHECKING)
  202. STRING[Y]. ╘HUS, THE ACCUMULATOR IS EQUAL TO THE YTH BYTE STARTING FROM
  203. THE LOCATION STRING IS DEFINED TO BE.
  204.  
  205.   ╫E THEN CALL THE ROUTINE ├OMMODORE SO GRACIOUSLY PROVIDED FOR US THAT PRINTS
  206. OUT THE CONTENTS OF THE ACCUMULATOR. ╬OW, SOME ROUTINES, AS WE'LL SEE IN OTHER
  207. EDITIONS, ARE NOT SO NICE AND MAY CHANGE THE VALUE OF THE ACCUMULATOR, THE 
  208. X AND Y REGISTERS. ╚OWEVER, ├OMMODORE WAS EXTRA NICE AND THE ROUTINE AT $FFD2 IS
  209. GUARANTEED NOT TO CHANGE ANY OF THE REGISTERS.
  210.  
  211.   ╘HE ROUTINE THEN "INY".  ╫HAT IS THIS? ╔T "╔╬CREMENTS THE ┘ REGISTER". ╔╬╪ 
  212. WILL "╔╬CREMENT THE ╪ REGISTER".  ╘HE ╪ AND ┘ REGISTER CAN NOT HAVE ANY MATH
  213. PERFORMED ON THEM OTHER THAN INCREMENT AND DECREMENT OPERATIONS (IE: ADDING
  214. ONE AND SUBTRACTING ONE).   ╘HE ONLY REGISTER THAT ALLOWS ADDITION OR
  215. SUBTRACTION IS THE ACCUMULATOR. ╚OWEVER, IN THIS CASE WE JUST WANT Y TO POINT
  216. TO THE NEXT CHARACTER, THE NEXT BYTE SO "╔╬┘" SERVES US FINE.
  217.   
  218.   ╫E THEN "├OM╨ARE ┘" REGISTER TO THE NUMBER OF CHARACTERS IN THE STRING. ╬OTICE
  219. THE # SIGN. ╔F WE HADN'T HAVE HAD THAT THERE, IT WOULD'VE TRIED TO LOOK AT 
  220. WHATEVER MEMORY LOCATION NUMCHARS WAS DEFINED FOR. ╬UMCHARS WAS SET UP TO HOLD
  221. THE NUMBER OF CHARACTERS IN THE STRING, NOT BE A POINTER FOR A MEMORY LOCATION.
  222.  
  223.   ╬OW THAT WE'VE COMPARED IT, WE "┬RANCH IF THE LAST COMPARISON WAS ╬OT ┼QUAL"
  224. BACK TO WHERE LOOP IS AT (IN THIS CASE, WHERE WE LOAD A WITH CHARACTER AGAIN).
  225.  
  226.   ╔F IT WAS EQUAL WE FALL THROUGH TO THE ╥╘╙ WHERE WE RETURN FROM OUR LITTLE
  227. PROGRAM.
  228.  
  229.   ┬ASICALLY, WE'VE GOT SOMETHING LIKE THE FOLLOWING FLOWCHART:
  230.                   _______
  231.                  / ╙╘┴╥╘ \
  232.                  \_______/
  233.                     ▄
  234.                    \▄/
  235.                 +-----------------+
  236.                 ▄ ╙ET ╔NDEX (┘)   ▄
  237.                 ▄ FIRST CHARACTER ▄ 
  238.                 +-----------------+
  239.                     ▄
  240.                    \▄/
  241.                 +-------------------+
  242.                 ▄ ╟ET THE CHARACTER ▄ /
  243.                 ▄ POINTED TO BY     ▄<------------------+
  244.                 ▄ THE INDEX(┘)      ▄ \                 ▄
  245.                 +-------------------+                   ▄
  246.                     ▄                                   ▄
  247.                    \▄/                                  ▄
  248.                 +-------------+                         ▄
  249.                 ▄ ╨RINT IT    ▄                         ▄
  250.                 +-------------+                         ▄
  251.                     ▄                                   ▄
  252.                    \▄/                                  ▄
  253.                 +------------------------+              ▄
  254.                 ▄ ╔NCREMENT THE ╔NDEX(┘) ▄              ▄
  255.                 +------------------------+              ▄
  256.                     ▄                                   ▄
  257.                    \▄/                                  ▄
  258.                     /\                                  ▄
  259.                    /= \                                 ▄
  260.                   /# OF\                                ▄
  261.                  /CHARS?\                               ▄
  262.                 /TO PRINT\___NO,NOT =_____------------->+
  263.                 \???     /
  264.                  \      /
  265.                   \    /
  266.                    \  /
  267.                     \/
  268.                      ▄
  269.                     \▄/
  270.                     _____
  271.                    / ┼╬─ \
  272.                    \_____/
  273.  
  274.   ╔NDEXED ADDRESSING IS USED *VERY* OFTEN IN ASSEMBLY LANGUAGE.  ╘RY PLAYING 
  275. WITH THE SECOND PROGRAM AND EXPERIMENT WITH IT UNTIL YOU UNDERSTAND FULLY WHAT
  276. IS GOING ON.  ╬EXT TIME WE'LL LOOK AT HOW TO ACCESS SOME OF THE DISKETTE 
  277. ROUTINES AND TO DISPLAY A FILE ON DISK.
  278.  
  279. ===============================================================================
  280.  
  281. ┴N ╔N-─EPTH ╠OOK AT THE 8563 ╓IDEO ├HIP ON THE ├= 128
  282. -----------------------------------------------------
  283. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  284.  
  285.   ─UE TO THE ARTICLE IN THE LAST ISSUE BY ├RAIG ┬RUCE (F2RX@JUPITER.SUN.CSD.UNB.
  286. CA) AND SOME LETTERS FROM PEOPLE ASKING ABOUT HOW THE 8563 ╓IDEO ├HIP WORKS AND
  287. MORE TECHNICAL INFORMATION THIS ARTICLE WILL ATTEMPT TO PRESENT AS MUCH DETAIL
  288. AS POSSIBLE ON THE 8563 CHIP & IT'S VARIOUS CAPIBILITIES.
  289.  
  290.   
  291.                             ---------------------  
  292.                             ! ╚ARDWARE ┴SPECTS: !
  293.                             ---------------------
  294.  
  295.   ╘HE FOLLOWING IS A PHYSICAL LAYOUT OF THE 8563 AND THE AVAILABLE PIN OUTS:
  296.  
  297.               +------------------+
  298.          42 O_▄──7  ╓──    ├╙ ─┴7▄_O 33   ─┴0-─┴7 - ┴DDRESS ┬US FOR ╥AM
  299.          41 O_▄──6            ─┴6▄_O 32   ──0-──7 - ─ATA ┬US FOR ╥AM
  300.          40 O_▄──5            ─┴5▄_O 31   ─0 - ─7 - ─ATA ┬US 8563 / ├PU
  301.          39 O_▄──4            ─┴4▄_O 30   ├╙ /├╙  - ├HIP ╙ELECTION ╨IN
  302.          38 O_▄──3            ─┴3▄_O 29   /╥╙     - ╥EGISTER ╙ELECT
  303.          36 O_▄──2            ─┴2▄_O 28   ╥/╫     - ─ATA ─IRECTION FOR ─ATA ┬US
  304.          35 O_▄──1            ─┴1▄_O 27   ╔╬╔╘    - ╔NITIALIZE INTERNAL LATCHES
  305.          34 O_▄──0            ─┴0▄_O 26   ─╔╙╨┼╬  - (╒NUSED) ─ISPLAY ┼NABLE
  306.               ▄                  ▄        ╥┼╙     - (╒NUSED) ╥ESET ALL SCAN CNTS
  307.               ▄                  ▄        ╘╙╘     - (╒NUSED) ╘EST PURPOSES ONLY
  308.          10 O_▄─7            /├┴╙▄_O 48   ─╥/╫    - ╠OCAL ─RAM ╥EAD/╫RITE
  309.          11 O_▄─6            /╥┴╙▄_O 47   /╥┴╙    - ╥OW ┴DDRESS ╙TROBE
  310.          13 O_▄─5            ─╥/╫▄_O 21   /├┴╙    - ├OLUMN ┴DDRESS ╙TROBE
  311.          14 O_▄─4                ▄        ─├╠╦    - ╓IDEO ─OT ├LOCK
  312.          15 O_▄─3               ╥▄_O 46   ├├╠╦    - (╒NUSED) ├HARACTER ├LOCK 
  313.          16 O_▄─2               ╟▄_O 45   ╠╨2     - ╔NPUT FOR ╠IGHT ╨EN
  314.          17 O_▄─1               ┬▄_O 44   ╚╙┘╬├   - ╚ORIZONTAL ╙YNC
  315.          18 O_▄─0               ╔▄_O 43   ╥,╟,┬,╔ - ╨IXEL ─ATA ╧UTPUTS
  316.               ▄                  ▄        
  317.               ▄                  ▄
  318.           8 O_▄/╥╙               ▄
  319.           7 O_▄/├╙               ▄
  320.           9 O_▄╥/╫           ╓╙┘╬▄_O 20
  321.          23 O_▄/╥┼╙          ╚╙┘╬▄_O 3
  322.               ▄                  ▄
  323.               ▄              ├├╠╦▄_O 1
  324.          25 O_▄/╠╨2        ─╔╙╨┼╬▄_O 19 
  325.               ▄                  ▄
  326.               ▄               ╘╙╘▄_O 24
  327.           2 O_▄/─├╠╦  ╓╙5    ╔╬╔╘▄_O 22
  328.               +------------------+ 
  329.                        !12
  330.                        O
  331.  
  332.  
  333.    ╘AKEN FROM ╨G. 596-8 ├=128 ╨ROGRAMMER'S ╥EFERENCE ═ANUAL ╨UBL. ╞EB 1986 
  334.    ┬ANTEM ┬OOKS
  335.  
  336.  
  337.  
  338.                          +-----------------------------+
  339.                          ▄ ╚OW ├OMMODORE ╚OOKED ╔T ╒P! ▄
  340.                          +-----------------------------+
  341.  
  342.   ╬OW, THE 8563 IS HOOKED UP TO THE COMPUTER VIA THE FOLLOWING METHOD:
  343.  
  344.      +---------------------+                          
  345.      ▄                     ▄             +--------+   +-------+
  346.      ▄├OMPUTER ═EMORY      ▄             ▄ 8563   ▄   ▄16K OR ▄   
  347.      ▄    (╥┴═)            ▄             ▄        ▄ % ▄ 64K   ▄   
  348.      ▄                     ▄___$D600_____▄DA0-7   ▄ % ▄╓─├ ╥┴═▄   
  349.      ▄                     ▄             ▄        ▄ % ▄       ▄
  350.      ▄                     ▄___$D601_____▄DR0-7   ▄ % ▄(╙CREEN▄
  351.      ▄                     ▄   ( /RS)    ▄    D0-7▄___▄ ═EM)  ▄
  352.      +---------------------+             +--------+   +-------+  
  353.  
  354.   ├ONFUSING 'EH? (╘HE %'S REPRESENT CONTROL SIGNALS THAT ALSO ARE USED).. ╫HAT 
  355. BASICALLY HAPPENS IS THAT EVERY TIME THE COMPUTER WANTS TO ACCESS THE 8563 TO 
  356. PROGRAM OR CHANGE ONE OF IT'S NUMEROUS REGISTERS IT HAS TO STORE THE REGISTER
  357. NUMBER TO $D600, THEN LOOP UNTIL THE 7TH BIT OF $D600 CHANGES TO A 1.  ╧NCE
  358. THIS IS DONE, YOU CAN THEN READ OR WRITE A VALUE TO/FROM $D601.
  359.  
  360.   ├OMMODORE ALSO EMPLOYED THE ══╒ (═EMORY ═ANAGEMENT ╒NIT) TO MANIPULATE PAGES 
  361. OF MEMORY AND THUS, THE 8563 ONLY SHOWS UP IN THE ╔/╧ PAGE (USUALLY REFERENCED
  362. AS ┬ANK 15 OR A VALUE OF $00 IN THE ══╒ ╥EGISTER AT $FF00) OR IN PAGES THAT THE 
  363. ╔/╧ SECTION OF MEMORY IS ENABLED.
  364.  
  365.   ╘HE REGISTER AT $D600 IN THE ╔/╧ SPACE OF THE ├=128 IS LAID OUT AS FOLLOWS:
  366.  
  367.   ┬IT ╨OSITION:
  368.       7       6        5       4       3       2        1      0
  369.       ╙TATUS  ╠IGHT╨EN ╓┬LANK  -----╒NUSED---- ------╓ERSION #--------
  370.  
  371.   ╫HEN A VALUE IS PLACED IN $D600 INSTEAD OF PUTTING THE VALUE IN ╙TATUS,
  372. ╠IGHT╨EN BITS ETC, THE VALUE REFLECTS WHICH REGISTER # IS REQUESTED. ┬IT 7 OF
  373. THIS REGISTER (╙TATUS) WILL THEN RETURN A BINARY 1 WHEN $D601 REFLECTS THE 
  374. ACTUAL VALUE OF THE REGISTER JUST POKED TO $D600. (╙EE THE ═╠ ROUTINES FOR
  375. STORING AND READING VALUES TO/FROM REGISTERS AT THE END OF THIS ARTICLE). ╫HEN
  376. A VALUE IS FIRST PLACE IN THIS REGISTER, $D600 BIT 7 IS EQUAL TO A ZERO.
  377.  
  378.   ┬IT 6, IS USED TO INDICATE WHEN NEW VALUES HAVE BEEN LATCHED INTO THE 
  379. LIGHTPEN REGISTERS (16-17). ┬IT 5, ╓┬LANK REFERS TO WHEN THE 8563 IS IN THE
  380. PERIOD KNOWN AS "╓ERTICAL ┬LANKING ╨ERIOD".  ╒SUALLY, HOWEVER THIS BIT IS 
  381. SELDOM REFERRED TO AS UPDATING THE 8563 IS USALLY TOO SLOW TO MAKE USE OF THIS
  382. FOR ANY SPECIAL EFFECTS.  
  383.  
  384.   ┬ITS 0-2 RETURN A VERSION # OF WHICH %000 AND %001 ARE THE KNOWN VERSIONS OUT.
  385. ┼ARLY 128'S WILL CONTAIN THE VALUE OF $0 WHILE LATER 128'S WILL CONTAIN THE 
  386. VALUE OF $1.  ╬OTE THAT THERE ARE SLIGHT DIFFERENCES BETWEEN THE 8563'S, IN THAT
  387. REGISTER 25 (HORIZONTAL SMOOTH SCOLL REGISTER) REQUIRES DIFFERENT SETTINGS. 
  388.  
  389.   ╘HE REGISTER AT $D601 RETURNS THE VALUE OF REGISTER # THAT HAS BEEN WRITTEN
  390. INTO $D601 (WHEN BIT 7 OF $D600 = %1). ╬OTE THAT STORING A VALUE HERE WILL ALSO
  391. DO A WRITE INTO THE REGISTER # SELECTED. (╥EFER TO THE ═╠ ROUTINES FOR STORING
  392. AND READING VALUES TO/FROM REGISTERS AT THE END OF THIS ARTICLE FOR AN EXAMPLE).
  393.  
  394.  
  395.                               ------------------------
  396.                               ▄ ╥EGISTER ─EFINITIONS ▄
  397.                               ------------------------
  398.  
  399. ╥EG#     7    6    5    4    3    2    1    0     ─ESCRIPTION              ╬OTES
  400. ------- ---- ---- ---- ---- ---- ---- ---- ----   ------------------------ -----
  401.   0     ╚Z╘7 ╚Z╘6 ╚Z╘5 ╚Z╘4 ╚Z╘3 ╚Z╘2 ╚Z╘1 ╚Z╘0   ╚ORIZONTAL ╘OTAL          ^1  
  402.   1     ╚Z─7 ╚Z─6 ╚Z─5 ╚Z─4 ╚Z─3 ╚Z─2 ╚Z─1 ╚Z─0   ╚ORIZONTAL ─ISPLAYED      ^1
  403.   2     ╚Z╙7 ╚Z╙6 ╚Z╙5 ╚Z╙4 ╚Z╙3 ╚Z╙2 ╚Z╙2 ╚Z╙0   ╚ORIZONTAL ╙YNC ╨OSITION  ^1
  404.   3     ╓╙╫3 ╓╙╫2 ╓╙╫1 ╓╙╫0 ╚╙╫3 ╚╙╫2 ╚╙╫1 ╚╙╫0   ╓ERT/╚ORIZ. ╙YNC ╫IDTH    ^2
  405.   4     ╓E╘7 ╓E╘6 ╓E╘5 ╓E╘4 ╓E╘3 ╓E╘2 ╓E╘1 ╓E╘0   ╓ERTICAL ╘OTAL            ^3
  406.   5     .... .... .... ╓E┴4 ╓E┴3 ╓E┴2 ╓E┴1 ╓E┴0   ╓ERTICAL ╘OTAL ╞INE ┴DJU  ^3
  407.   6     ╓E─7 ╓E─6 ╓E─5 ╓E─4 ╓E─3 ╓E─2 ╓E─1 ╓E─0   ╓ERTICAL ─ISPLAYED        ^3
  408.   7     ╓E╙7 ╓E╙6 ╓E╙5 ╓E╙4 ╓E╙3 ╓E╙2 ╓E╙1 ╓E╙0   ╓ERTICAL ╙YNC ╨OSITION    ^2
  409.   8     .... .... .... .... .... .... ╔LC1 ╔LC0   ╔NTERLACE ═ODE            ^4
  410.   9     .... .... .... ├╘╓4 ├╘╓3 ├╘╓2 ├╘╓1 ├╘╓0   ├HARACTER ╘OTAL ╓ERTICAL  ^5
  411.  10     .... ├R═1 ├R═0 ├SS4 ├SS3 ├SS2 ├SS1 ├SS0   ├URSOR ═ODE/ ╙TART ╙CAN   ^6
  412.  11     .... .... .... ├ES4 ├ES3 ├ES2 ├ES1 ├ES0   ├URSOR ┼ND ╙CAN           ^6
  413.  12     ─S15 ─S14 ─S13 ─S12 ─S11 ─S10 ─S09 ─S08   ─ISPLAY ╙TART ┴DRS (╚I)   ^7
  414.  13     ─S07 ─S06 ─S05 ─S04 ─S03 ─S02 ─S01 ─S00   ─ISPLAY ╙TART ┴DRS (╠O)   ^7
  415.  14     ├P15 ├P14 ├P13 ├P12 ├P11 ├P10 ├P09 ├P08   ├URSOR ╨OSITION (╚I)      ^7
  416.  15     ├P07 ├P06 ├P05 ├P04 ├P03 ├P02 ├P01 ├P00   ├URSOR ╨OSITION (╠O)      ^7
  417.  16     ╠P╓7 ╠P╓6 ╠P╓5 ╠P╓4 ╠P╓3 ╠P╓2 ╠P╓1 ╠P╓0   ╠IGHT ╨EN ╓ERITCAL        ^8
  418.  17     ╠P╚7 ╠P╚6 ╠P╚5 ╠P╚4 ╠P╚3 ╠P╚2 ╠P╚1 ╠P╚0   ╠IGHT ╨EN ╚ORIZONTAL      ^8
  419.  18     ╒A15 ╒A14 ╒A13 ╒A12 ╒A11 ╒A10 ╒A09 ╒A08   ╒PDATE ┴DDRESS (╚I)       ^9
  420.  19     ╒A07 ╒A06 ╒A05 ╒A04 ╒A03 ╒A02 ╒A01 ╒A00   ╒PDATE ┴DDRESS (╠O)       ^9
  421.  20     ┴T15 ┴T14 ┴T13 ┴T12 ┴T11 ┴T10 ┴T09 ┴T08   ┴TTRIBUTE ╙TART ┴DRS (╚I) ^7
  422.  21     ┴T07 ┴T06 ┴T05 ┴T04 ┴T03 ┴T02 ┴T01 ┴T00   ┴TTRIBUTE ╙TART ┴DRS (╠O) ^7
  423.  22     ╚C╨3 ╚C╨2 ╚C╨1 ╚C╨0 ╔C╙3 ╔C╙2 ╔C╙1 ╔C╙0   ╚Z ├HR ╨XL ╘TL/╔├HAR ╙PC  ^┴
  424.  23     .... .... .... ╓C╨4 ╓C╨3 ╓C╨2 ╓C╨1 ╓C╨0   ╓ERT. ├HARACTER ╨XL ╙PC   ^5
  425.  24     ┬LK═ ╥VS╙ ╓SS5 ╓SS4 ╓SS3 ╓SS2 ╓SS1 ╓SS0   ┬LOCK/╥VS ╙CR/╓. ╙CROLL ^9^┬^├
  426.  25     ╘EXT ┴TRI ╙EMI ─BLE ╚SS3 ╚SS2 ╚SS1 ╚SS0   ─IFF. ═ODE ╙W/╚. ╙CROLL  ^─,^┼
  427.  26     ╞GD3 ╞GD2 ╞GD1 ╞GD0 ┬GD3 ┬GD2 ┬GD1 ┬GD0   ╞ORE╟ROUND/┬ACK╟ROUND ├OL ^╞
  428.  27     ╥IN7 ╥IN6 ╥IN5 ╥IN4 ╥IN3 ╥IN2 ╥IN1 ╥IN0   ╥OW/┴DRS. ╔NCREMENT       ^╟
  429.  28     ├╙A2 ├╙A1 ├╙A0 ╥AM╘ .... .... .... ....   ├HARACTER ╙ET ┴DDRS/╥AM  ^╚,^╔
  430.  29     .... .... .... ╒D╠4 ╒D╠3 ╒D╠2 ╒D╠1 ╒D╠0   ╒NDERLINE ╙CAN ╠INE       ^6
  431.  30     ╫D├7 ╫D├6 ╫D├5 ╫D├4 ╫D├3 ╫D├2 ╫D├1 ╫D├0   ╫ORD ├OUNT (-1)           ^9
  432.  31     ─TA7 ─TA6 ─TA5 ─TA4 ─TA3 ─TA2 ─TA1 ─TA0   ─ATA                      ^9  
  433.  32     ┬LK╞ ┬LK┼ ┬LK─ ┬LK├ ┬LK┬ ┬LK┴ ┬LK9 ┬LK8   ┬LOCK ├OPY ╙OURCE (HI)    ^9
  434.  33     ┬LK7 ┬LK6 ┬LK5 ┬LK4 ┬LK3 ┬LK2 ┬LK1 ┬LK0   ┬LOCK ├OPY ╙OURCE (LO)    ^9
  435.  34     ─E┬7 ─E┬6 ─E┬5 ─E┬4 ─E┬3 ─E┬2 ─E┬1 ─E┬0   ─ISPLAY ┼NABLE ┬EGIN      ^╩
  436.  35     ─E┼7 ─E┼6 ─E┼5 ─E┼4 ─E┼3 ─E┼2 ─E┼1 ─E┼0   ─ISPLAY ┼NABLE ┼ND        ^╩
  437.  36     .... .... .... .... ─RM3 ─RM2 ─RM1 ─RM0   ─╥┴═ ╥EFRESH ╥ATE         ^╦
  438.  
  439.                              +-----------------+
  440.                              ▄ ╥EGISTER ╒SAGE: ▄
  441.                              +-----------------+
  442.  
  443. ^1 : ╥EGISTER #0:     ╚ORIZONTAL ╘OTAL
  444. ---  ╥EGISTER #1:     ╚ORIZONTAL ─ISPLAYED
  445.      ╥EGISTER #2:     ╚ORIZONTAL ╙YNC ╨ULSE
  446.   
  447.   ╘HESE TWO REGISTER FUNCTION TO DEFINE THE DISPLAY WIDTH OF THE SCREEN. 
  448. ╥EGISTER 0 WILL CONTAIN THE NUMBER OF CHARACTERS MINUS 1 BETWEEN SUCESSIVE
  449. HORIZONTAL SYNC PULSES, THE HORIZONTAL BORDER AND THE INTERVAL BETWEEN
  450. HORIZONTAL SYNC PULSES. ╘HE NORMAL VALUE FOR THIS IS USUALLY SET TO 126.
  451. ╥EGISTER 1 SPECIFIES HOW MANY OF THE POSITIONS AS SPECIFIED IN REGISTER 0 CAN
  452. ACTUALLY BE USED TO DISPLAY CHARACTERS.  ╘HE DEFAULT VALUE FOR THIS IS 80. 
  453. ╘HE ╓─├ CAN TAKE VALUES LESS THAN 80 AND THUS, WILL ONLY DISPLAY THAT MANY
  454. CHARACTERS. ┴ USEFUL EFFECT CAN BE A SWEEP FROM THE RIGHT BY INCREMENTING
  455. THE VALUE HERE FROM 1 TO 80. ╥EGISTER #2 SPECIFIES THE STARTING CHARACTER 
  456. POSITION AT WHICH THE VERTICAL SYNC PULSE BEGINS. ╘HUS, IT ALSO DETERMINES
  457. WHERE ON THE ACTIVE SCREEN CHARACTERS APPEAR. ┴ DEFAULT VALUE OF 102, 
  458. INCREASING THE VALUE MOVES THE SCREEN TO THE LEFT, DECREASING IT MOVES IT TO
  459. THE RIGHT.
  460.  
  461. ^2 : ╥EGISTER #3:     ╓ERTICAL / ╚ORIZONTAL ╙YNC ╨OSITION.
  462. ---- ╥EGISTER #7:     ╓ERTICAL ╙YNC ╨OSITION 
  463.  
  464.   ╔N ╥EGISTER 3, ┬ITS 0-3 OF THIS REGISTER SPECIFIES THE HORIZONTAL SYNC WIDTH
  465. AND SHOULD BE EQUAL TO 1 + THE NUMBER OF PIXELS PER CHARACTER. ╘HUS, THE VALUE
  466. HERE IS NORMALLY 1+8 OR 9. ┬ITS 4-7 OF REGISTER 3 SPECIFY THE VERTICAL SYNC
  467. WIDTH AND NORMALLY CONTAINS A VALUE OF 4. ╞OR INTERLACE SYNC AND VIDEO MODE,
  468. USE A VALUE THAT IS TWICE THE NUMBER OF SCAN LINES DESIRED. ╥EGISTER #7 ALLOWS
  469. FOR ADJUSTMENT OF WHERE THE VERTICAL SYNC WILL BE GENERATED ALLOWING SHIFTING
  470. OF THE ACTUAL DISPLAY UP AND DOWN. ╬ORMALLY, A VALUE OF 4, DECREASING THE VALUE
  471. WILL MOVE THE SCREEN DOWN, INCREASING IT WILL APPEAR TO MOVE IT UPWARDS.
  472.  
  473. ^3 : ╥EGISTER #4:     ╓ERTICAL ╘OTAL
  474. ---- ╥EGISTER #5:     ╓ERTICAL ╘OTAL ╞INE ┴DJUST
  475.      ╥EGISTER #6:     ╓ERTICAL ─ISPLAYED
  476.  
  477.   ╥EGISTER #4 OF THIS REGISTER DETERMINES THE TOTAL NUMBER OF SCREEN ROWS, 
  478. INCLUDING THE ROWS FOR THE ACTIVE DISPLAY, AND THE TOP AND BOTTOM BORDERS IN
  479. ADDITION TO THAT OF THE VERTICAL SYNC WIDTH. ╘HE VALUE HELD HERE IS NORMALLY
  480. A VALUE OF 32 FOR ╬╘╙├ SYSTEMS (╒╙ ╙TANDARD) OR 39 FOR ╨┴╠(┼UROPEAN) SYSTEMS.
  481. ╥EGISTER #5 HOLDS IN BITS 0-4 A "FINE-ADJUST" WHERE ANY EXTRA SCAN LINES THAT
  482. ARE NECESSARY TO MAKE UP THE DISPLAY CAN BE SPECIFIED HERE. ╘HE VALUE HERE IS 
  483. NORMALLY A 0 IN BOTH THE ╬╘╙├ AND ╨┴╠ INITIALIZATIONS BY THE KERNAL AND BITS
  484. 5-7 ARE UNUSED, ALWAYS RETURNING A BINARY 1111. ╥EGISTER #6 SPECIFIES THE TOTAL
  485. NUMBER OF THE VERTICAL CHARACTER POSITIONS (AS SET IN ╥EGISTER 4) THAT CAN BE
  486. USED FOR ACTUAL DISPLAY OF CHARACTERS. ╘HUS, THIS REGISTER USUALLY HOLDS A 
  487. VALUE OF 25 FOR A STANDARD 25-ROW DISPLAY.
  488.  
  489. ^4 : ╥EGISTER #8:     ╔NTERLACE ═ODE ├ONTROL
  490. ----
  491.   
  492.   ╥EGISTER 8 ALLOWS CONTROL OF VARIOUS DISPLAY MODES THE 8563 CAN GENERATE. 
  493. ┬ITS 0 AND 1 ARE THE ONLY BITS USED IN THIS REGISTER, THE REST ALWAYS READING
  494. A BINARY 1. ┬ITS 0 AND 1 ARE CONFIGURED AS FOLLOWS:
  495.  
  496.   ┬INARY %00, %10 - ╬ON╔NTERLACED ═ODE
  497.               %01 - ╔NTERLACED ╙YNC
  498.               %11 - ╔NTERLACED ╙YNC AND ╓IDEO
  499.  
  500.   ╬OTE THAT THE DEFAULT VALUE IS $00 WHICH IS STANDARD, NON-INTERLACED.
  501. ╔NTERLACED SYNC DRAWS EACH HORIZONTAL SCAN LINE TWICE BUT APPEARS TO SUFFER FROM
  502. AN ANNOYING JITTER DUE TO HOW IT IS DRAWN. ╔NTERLACED ╙YNC AND ╓IDEO DRAWS TWICE
  503. AS MANY LINES, THUS DOUBLING THE RESOLUTION. ╚OWEVER, IT ALSO SUFFERS FROM 
  504. JITTER AND THAT IS WHY MOST MONITORS SUFFER HORRIBLY WHEN USING PROGRAMS THAT 
  505. SUPPORT 30 COLUMNS OR GREATER. ╬OTE THAT FOR INTERLACED SYNC AND VIDEO, THE
  506. FOLLOWING REGISTERS WILL NEED TO BE CHANGED: #'S: 0,4,6,7,8.
  507.  
  508. ^5 : ╥EGISTER #9:     ╘OTAL ╙CAN ╠INES ╨ER ├HARACTER
  509. ---- 
  510.   
  511.   ┬ITS 0-4 OF THIS REGISTER ARE THE ONLY RELEVANT ONES, THE REST RETURNING A 
  512. BINARY 1. ┬ITS 0-4 DETERMINE THE CHARACTER HEIGHT IN SCAN-LINES OF DISPLAYED
  513. CHARACTERS AND ALLOW UP TO SCAN-LINE HEIGHTS OF 32 SCAN LINES. ╘HE ╓─├ NORMALLY
  514. SETS ASIDE 16 BYTES FOR EACH CHARACTER (NORMALLY, EACH BYTE IS EQUIVLENT TO
  515. 1 SCAN LINE) SO THE VALUE HERE COULD BE INCREASED TO 16-1 AND A DOUBLE-HEIGHT
  516. CHARACTER SET COULD BE LOADED IN. ╬OTE, HOWEVER THAT VALUES LESS THAN 16 WILL
  517. TELL THE ╓─├ TO USE A 8,192 BYTE CHARACTER SET (NORMAL) WHILE SPECIFYING VALUES
  518. GREATER THAN 16 WILL MAKE IT USE 32 BYTES PER CHARACTER EVEN IF SOME OF THE 
  519. BYTES ARE NOT USED.
  520.  
  521. ^6 : ╥EGISTER #10:    ├URSOR ═ODE / ╙TART ╙CAN ╠INE     
  522. ---- ╥EGISTER #11:    ├URSOR ┼ND ╙CAN ╠INE.
  523.      ╥EGISTER #29:    ╒NDER╠INE ╙CAN ╠INE ├ONTROL.
  524.   
  525.   ╘HESE REGISTERS ALLOW THE USER TO SPECIFY THE CURSOR BLINK MODE, AS WELL AS
  526. THE STARTING AND ENDING SCAN LINES FOR THE CURSOR (ALLOWING A FULL SOLID, 
  527. AN UNDERLINE, ┬ITS 0-4 OF REGISETER #10 DETERMINES THE SCAN LINE WITHIN EACH
  528. POSITION FOR THE TOP OF THE CURSOR. ╬ORMALLY, THIS VALUE HOLDS A VALUE
  529. OF 0 FOR THE BLOCK CURSOR, OR A VALUE OF 7 FOR THE UNDERLINE CURSOR. ┬ITS 5-6 OF
  530. ╥EGISTER 10 SPECIFY THE BLINK RATE FOR THE CURSOR. ┴ VALUE OF %00 SPECIFIES NO
  531. BLINK, IE: A SOLID CURSOR. ┴ VALUE OF %01 SPECIFIES NO CURSOR, A VALUE OF %10
  532. SPECIFIES A FLASH RATE OF 1/16 THE SCREEN REFRESH RATE, WHILE A VALUE OF %11
  533. SPECIFIES A FLASH RATE OF 1/32 THE SCREEN REFRESH RATE. ╬OTE THAT BIT 7 OF
  534. ╥EGISTER 10 IS UNUSED AND NORMALLY RETURNS A BINARY 1. ╥EGISTER 11 SPECIFIES
  535. THE BOTTOM SCAN LINES IN BITS 0-4, THE OTHER UNUSED BITS RETURNING A BINARY 1.
  536. ╘HE VALUE HELD IN THESE BITS USUALLY IS 7 FOR THE BLOCK AND UNDERLINE CURSOR
  537. MODES IN THE NORMAL 128 EDITOR. ╥EGISTER #29 IS USED TO INDICATE WHERE THE SCAN
  538. LINE IS "SET" IN THE CHARACTER. ╘HE "UNDERLINE" IS ONLY 1 PIXEL TALL AND THUS,
  539. THIS LOCATION JUST INDICATES THE START AND END LOCATION IN PIXELS, SIMILAIR TO 
  540. REGISTERS #10 AND #11 BEING THE SAME VALUE. ╬OTE THAT BITS 5-7 OF THIS REGISTER
  541. IS UNUSED AND NORMALLY RETURN A BINARY 1.
  542.  
  543. ^7 : ╥EGISTER #12:    ─ISPLAY ╙TART ┴DDRESS (╚I)
  544. ---- ╥EGISTER #13:    ─ISPLAY ╙TART ┴DDRESS (╠O)
  545.      ╥EGISTER #14:    ├URSOR ╨OSITION       (╚I)
  546.      ╥EGISTER #15:    ├URSOR ╨OSITION       (╠O)
  547.      ╥EGISTER #20:    ┴TTRIBUTE ╙TART ┴DDRS (╚I)
  548.      ╥EGISTER #21:    ┴TTRIBUTE ╙TART ┴DDRS (╠O)
  549.  
  550.   ╬OTE FIRST, THAT ALL OF THESE REGISTERS ARE GROUPED IN ╚I BYTE, ╠O BYTE ORDER
  551. WHICH IS USUALLY DIFFERENT FROM THE 6502 CONVENTION OF LOW BYTE, HI BYTE (IE: 
  552. IN NORMAL 6502 ML, $C000 IS STORED AS $00 $C0, HOWEVER IN THE 8563 IT WOULD BE
  553. STORED AS $C0 $00).  ╥EGISTERS 12 AND 13 DETERMINE, WHERE IN ╓─├ MEMORY THE
  554. 8563 IS THE START OF THE SCREEN. ╔NCREMENTING THIS VALUE BY 80 (THE NUMBER OF
  555. CHARACTERS PER LINE) AND WITH A LITTLE ADDITIONAL WORK CAN PROVIDE A VERY 
  556. EFFECIENT WAY OF HAVING A SCREEN THAT "SEEMS" TO BE LARGER THAN JUST 80X25.
  557. ╘HE CURSOR POSITION IN REGISTERS 14 AND 15 REFLECT THE ACTUAL CHARACTER IN
  558. MEMORY THAT THE CURSOR CURRENTLY LIES OVER. ╔F IT'S NOT ON THE DISPLAY SCREEN,
  559. THEN IT IS NOT DISPLAYED. ╥EGISTERS 20 AND 21 REFLECT WHERE IN THE 8563 MEMORY
  560. ATTRIBUTE MEMORY IS HELD. ┴TTRIBUTE MEMORY REFERS TO THE CHARACTER ATTRIBUTES
  561. SUCH AS FLASH, INVERSE VIDEO, COLOR ETC THAT CAN BE SET FOR EACH CHARACTER.
  562.  
  563. ^8 : ╥EGISTER #16:    ╠IGHT ╨EN ╓ERTICAL
  564. ---- ╥EGISTER #17:    ╠IGHT ╨EN ╚ORIZONTAL
  565.  
  566.   ╘HESE REGISTERS RETURN THE LIGHT PEN POSITION AND REFER TO THE ACTUAL 
  567. CHARACTER POSITIONS ON SCREEN (IE: VALUES RANGING FROM 1..25 FOR VERTICAL).
  568. ╘HE HORIZONTAL READING WILL NOT CORROSPOND EXACTLY TO CHARACTER POSITIONS, BUT
  569. WILL RANGE FROM VALUES OF 27-29 TO 120 DEPENDING ON THE EDGE OF THE SCREEN.
  570. ╔T'S RECOMMENDED THAT THE HORIZONTAL CHARACTER POSITION IS GIVEN MORE TOLERANCE
  571. THAN THE VERTICAL LIGHT PEN POSITION FOR THIS REASON.
  572.  
  573. ^9 : ╥EGISTER #18:    ╒PDATE ┴DDRESS (╚I)
  574. ---- ╥EGISTER #19:    ╒PDATE ┴DDRESS (╠O)
  575.      ╥EGISTER #24:7   ├OPY / ╞ILL ┬IT
  576.      ╥EGISTER #30:    ╫ORD ├OUNT(-1) 
  577.      ╥EGISTER #31:    ─ATA
  578.      ╥EGISTER #32:    ┬LOCK ├OPY ╙RC (╚I)
  579.      ╥EGISTER #33:    ┬LOCK ├OPY ╙RC (╠O)
  580.  
  581.   ╘HESE REGISTERS ALLOW CONTROL AND MANIPULATION OF THE 16K OR 64K BLOCK WITHIN
  582. THE 8563 MEMORY.  ╥EGISTERS 18 AND 19 POINT TO WHERE IN ╓─├ MEMORY THE NEXT
  583. READ OR WRITE WILL TAKE PLACE FROM. ╥EGISTER 30 SPECIFIES THE NUMBER OF BYTES
  584. - 1 TO COPY OR FILL DEPENDING ON BIT # 7 OF REGISTER #24. ╬ORMALLY, THE 8563 
  585. WILL AUTOMATICALLY PERFORM THE DESIGNATED OPERATION (OF WHAT BIT 7 OF REGISTER
  586. #24 SAYS) WHEN REGISTER #31 (THE DATA BYTE) IS WRITTEN TO. ╥EGISTERS 18 AND 19
  587. AUTOMATICALLY UPDATE UPON READ OR WRITE, SO THAT IS WHY REGISTER #30 SPECIFIES
  588. A VALUE 1 LESS THAN WHAT IS ACTUALLY NEEDED. ╥EGISTER #31, AS ALREADY MENTIONED
  589. IS THE BYTE TO WRITE FOR REGISTER #30 TIMES (OR COPY FROM ╥EGISTER#32 / #33).
  590. ╔F REGISTER #24, BIT 7 IS SPECIFIED AS A BINARY 1 THEN THE MEMORY IS COPIED FROM
  591. THE ADDRESS IN ╓─├ MEMORY POINTED TO BY REGISTERS #32 AND #33.
  592.  
  593. ^┴ : ╥EGISTER #22:    ├HARACTER ╚ORIZONTAL ╙IZE ├ONTROL
  594. ----
  595.  
  596.   ┬ITS 0-3 OF THIS REGISTER DETERMINES HOW MANY HORIZONTAL PIXELS ARE USED
  597. FOR EACH DISPLAYED CHARACTER. ╓ALUES GREATER THAN 8 HERE RESULT IN APPARENT
  598. GAPS IN THE DISPLAY. ╔NTER-CHARACTER SPACING CAN BE ACHIEVED BY SETTING THIS
  599. VALUE GREATER THAN THAT OF BITS 4-7. ┬ITS 4-7 DETERMINE THE WIDTH OF EACH
  600. CHARACTER POSITION IN PIXELS. ╘HUS, WHILE BITS 0-3 ALLOCATE N-PIXELS, BITS
  601. 4-7 SPECIFY HOW MANY OF THOSE PIXELS ARE USED FOR CHARACTER DISPLAY.
  602.  
  603. ^┬ : ╥EGISTER #24:5   ╥EVERSE ╙CREEN ┬IT
  604. ---- ╥EGISTER #24:6   ┬LINK ╥ATE FOR ├HARACTERS.
  605.  
  606.   ┬IT #6 SPECIFIES FOR THE ╓─├ FOR ALL PIXELS NORMALLY UNSET ON THE ╓─├ SCREEN
  607. TO BE SET, AND ALL SET PIXELS TO BE UNSET.  ┬IT #5 SPECIFIES THE BLINK RATE
  608. FOR ALL CHARACTERS WITH THE BLINK ATTRIBUTE. ╙ETTING THIS TO A BINARY 1
  609. SPECIFIES A BLINK RATE OF 1/32 THE REFRESH RATE, WHILE A BINARY 0 IS EQUIVLANT
  610. TO A BLINK RATE 1/16TH OF THE REFRESH RATE.
  611.  
  612. ^├ : ╥EGISTER #24:0-4 ╓ERTICAL ╙MOOTH ╙CROLL
  613. ----
  614.    
  615.   ╘HE 8563 PROVIDES FOR A SMOOTH SCROLL, ALLOWING BITS 0-4 TO FUNCTION AS AN 
  616. INDICATOR OF THE NUMBER OF BITS TO SCROLL THE SCREEN VERTICALLY UPWARD.
  617.  
  618. ^─ : ╥EGISTER #25:7   ╘EXT OR ╟RAPHICS ═ODE ╔NDICATOR ┬IT
  619. ---- ╥EGISTER #25:6   ═ONOCHROME ═ODE ┬IT
  620.      ╥EGISTER #25:5   ╙EMI-╟RAPHICS ═ODE
  621.      ╥EGISTER #25:4   ─OUBLE-╨IXEL ═ODE
  622.  
  623.   ╘HE 8563 ALLOWS THE IMPLEMENTATION OF A GRAPHICS MODE, IN WHERE ALL OF THE 16K
  624. OF THE SCREEN MAY BE BIT-MAPPED SEQUENTIALLY RESULTING IN A RESOLUTION OF
  625. 640X200 (SEE ├RAIG ┬RUCE'S 8563 ╠INE-╨LOTTING ROUTINE IN THE FIRST ISSUE FOR A
  626. MORE DETAILED EXPLANATION OF THIS FEATURE). ╙ETTING THIS BIT TO 1 SPECIFIES
  627. GRAPHICS MODE, BINARY 0 INDICATES TEXT MODE.  ┬IT 6 INDICATES TO THE 8563 WHERE
  628. TO OBTAIN ITS COLOR INFORMATION ETC, ABOUT THE CHARACTERS. ┬IT 6 WHEN IT IS A
  629. BINARY 0 RESULTS IN THE 8563 TAKING IT'S COLOR INFORMATION FROM BITS 4-7 OF 
  630. REGISTER 26. ╫HEN THIS BIT IS A BINARY 1, THE ATTRIBUTE MEMORY IS USED TO 
  631. OBTAIN COLOR, FLASH, REVERSE INFORMATION. ┴LSO NOTE THAN WHEN THIS BIT IS A
  632. BINARY 1 THAT ONLY THE FIRST OF THE TWO CHARACTER SETS IS AVAILABLE. ┬IT #5
  633. INDICATES A SEMI-GRAPHICS MODE THAT ALLOWS THE RIGHTMOST PIXEL OF ANY CHARACTERS
  634. TO BE REPEATED THROUGH-OUT THE INTERCHARACTER SPACING GAP. ┴CTIVATING IT ON THE
  635. NORMAL DISPLAY WILL RESULT IN WHAT APPEARS TO BE A "DIGITAL" CHARACTER FONT. ╘HE
  636. 8563 WITH BIT #4 ALLOWS A PIXEL-DOUBLE FEATURE WHICH RESULTS IN ALL DISPLAYED
  637. HORIZONTAL PIXELS HAVING TWICE THEIR USUAL SIZE. ╘HUS, A 40 COLUMN SCREEN IS
  638. EASILY OBTAINABLE ALTHOUGH THE VALUES IN REGISTERS #00-#02 MUST BE HALVED.
  639.  
  640. ^┼ : ╥EGISTER #25:    ╚ORIZONTAL ╙MOOTH ├ONTROL
  641. ---- 
  642.  
  643.   ╘HIS REGISTER IS ANALOGOUS TO REGISTER #24 ╓ERTICAL ╙MOOTH ├ONTROL AND 
  644. FUNCTIONS SIMILAIRLY. ╔NCREASING THIS BITS MOVES THE SCREEN ONE PIXEL TO THE
  645. RIGHT, WHILE DECREASING THEM MOVES THE SCREEN ONE PIXEL TO THE LEFT.
  646.  
  647. ^╞ : ╥EGISTER #26:    ╞ORE╟ROUND / ┬ACK╟ROUND ├OLOR ╥EGISTER
  648. ----
  649.  
  650.   ╘HIS REGISTER, IN BITS 0-3 SPECIFIES THE BACKGROUND COLOR OF THE DISPLAY WHILE
  651. BITS 4-7 SPECIFY THE FOREGROUND CHARACTER COLORS WHEN ATTRIBUTES ARE DISABLED 
  652. (VIA BIT 6 OF REGISTER #25).  ╬OTE, THESE ARE NOT THE USUAL ├= COLORS BUT ARE
  653. INSTEAD ORGANIZED AS FOLLOWS:
  654.  
  655.    ┬IT ╓ALUE  ─ECIMAL ╓ALUE   ├OLOR
  656.    ----------------------------------       +-----------------------------+
  657.     %0000       0 / $00       ┬LACK         ▄  ╬OTE: ┬IT 0 = ╔NTENSITY    ▄
  658.     %0001       1 / $01       ─ARK ╟RAY     ▄        ┬IT 1 = ┬LUE         ▄
  659.     %0010       2 / $02       ─ARK ┬LUE     ▄ ╥╟┬╔   ┬IT 2 = ╟REEN        ▄
  660.     %0011       3 / $03       ╠IGHT ┬LUE    ▄        ┬IT 3 = ╥ED          ▄ 
  661.     %0100       4 / $04       ─ARK ╟REEN    ▄                             ▄
  662.     %0101       5 / $05       ╠IGHT ╟REEN   +-----------------------------+
  663.     %0110       6 / $06       ─ARK ├YAN
  664.     %0111       7 / $07       ╠IGHT ├YAN
  665.     %1000       8 / $08       ─ARK ╥ED
  666.     %1001       9 / $09       ╠IGHT ╥ED
  667.     %1010      10 / $0┴       ─ARK ╨URPLE
  668.     %1011      11 / $0┬       ╠IGHT ╨URPLE
  669.     %1100      12 / $0├       ─ARK ┘ELLO
  670.     %1101      13 / $0─       ╠IGHT ┘ELLOW
  671.     %1110      14 / $0┼       ╠IGHT ╟RAY (─ARK ╫HITE)
  672.     %1111      15 / $0╞       ╫HITE
  673.  
  674. ^╟ : ╥EGISTER #27:    ╥OW ┴DDRESS ─ISPLAY ╔NCREMENT
  675. ----
  676.  
  677.   ╘HIS REGISTER SPECIFIES THE NUMBER OF BYTES TO SKIP, WHEN DISPLAYING
  678. CHARACTERS ON THE 8563 SCREEN. ╬ORMALLY, THIS BYTE HOLDS A VALUE OF $00 
  679. INDICATING NO BYTES TO SKIP; HOWEVER TYPICALLY PROGRAMS THAT "SCROLL" THE 
  680. SCREEN DO SO BY SETTING THIS TO 80 OR 160 ALLOWING THE PROGRAM TO THEN ALTER
  681. THE ╙CREEN ╙TART (╥EGISTERS #12 AND #13) AND APPEAR TO "SCROLL". ╬OTE THE 
  682. NORMAL ├= 128 ╦ERNAL ╙CREEN ┼DITOR DOES NOT SUPPORT THIS FUNCTION.
  683.  
  684. ^╚ : ╥EGISTER #28:7-5 ├HARACTER ╙ET ┴DDRESS
  685. ----
  686.  
  687.   ╘HESE BITS INDICATE THE ADDRESS OF SCREEN MEMORY * 8K. ╘HUS THE VALUES IN 
  688. THESE BITS MAY BE MULTIPLIED BY 8192 TO OBTAIN THE STARTING CHARACTER SET
  689. POSITION (NORMALL THESE BITS HOLD A VALUE OF $01 INDICATING THE CHARACTER
  690. SET BEGINS AT 8192).  ╬OTE THAT THE CHARACTER SET IS NOT IN ╥╧═, BUT IS USUALLY
  691. COPIED TO 8192 WHEN THE COMPUTER IS FIRST TURNED ON AND THE 8563 IS INITIALIZED.
  692. (┼XAMINE THE ╔╬╔╘80 ROUTINE AT $├┼0├ IN BANK 15).
  693.  
  694. ^╔ : ╥EGISTER #28:4   ╥AM ├HIP ╘YPE
  695. ----
  696.   
  697.   ╘HIS BIT SPECIFIES WHETHER 16K OR 64K OF ╥┴═ HAS BEEN INSTALLED. ╬OTE, HOWEVER
  698. THAT THIS VALUE MAY NOT REFLECT FUTURE UPGRADES FROM 16K TO 64K.  ╔T IS BEST,
  699. IF A PROGRAM IS DEPENDANT ON 64K TO WRITE TO AN ADDRESS > 16K AND SEE IF IT
  700. IS MIRRORED AT ANY OTHER LOCATION IN ANOTHER SECTION OF MEMORY. ╘HIS BIT HAS A
  701. BINARY VALUE OF 0 IF 16K OR 1 IF 64K ╥┴═.
  702.  
  703. ^╩ : ╥EGISTER #34:    ─ISPLAY ┼NABLE ┬EGIN
  704. ---- ╥EGISTER #35:    ─ISPLAY ┼NABLE ┼ND
  705.  
  706.   ╘HE 8563 CAN EXTEND IT'S HORIZONTAL BLANKING INTERVAL TO BLANK A PORTION OF
  707. THE DISPLAYED SCREEN.  ╘HE VALUE IN REGISTER #34 DETERMINES THE RIGHTMOST 
  708. BLANKED COLUMN, AND REGISTER #35 DETERMINES THE LEFTMOST BLANKED COLUMN.  ╬OTE
  709. THAT A VALUE OF 6 USUALLY CORRESPONDS TO THE LEFTMOST COLUMN OF THE SCREEN, 
  710. WHILE A VALUE OF 85 CORRESPONDS TO THE RIGHTMOST COLUMN.  ╘HIS FEATURE IS USEFUL
  711. FOR "INSIDE-OUT" WRAPS IN WHICH BOTH THE RIGHT AND LEFT MARGIN CAN CLOSE-IN ON
  712. TEXT, THE TEXT CAN BE CLEARED, THESE VALUES RESET ETC... 
  713.  
  714. ^╦ : ╥EGISTER #36:    ╥EFRESH ├YCLES PER ╙CAN ╠INE
  715. ----
  716.  
  717.   ╘HIS REGISTER IN BITS 0-3 ALLOWS THE USER (IF HE HAD ANY REASON) TO SPECIFY
  718. THE NUMBER OF REFRESH CYCLES FOR MEMORY FOR THE RAM.  ╙ETTING THIS VALUE TOO
  719. LOW MAY CAUSE THE ╥┴═ TO NOT REMEMBER ALL THE INFORMATION.  ├HANGING THIS VALUE
  720. GIVES SOME ADVANTAGE, IN TERMS OF DISPLAY SPEED INCREASES BUT IS NOT ADVISED. 
  721. ╘HE VALUE NORMALLY HELD HERE IS $05, FOR FIVE REFRESH CYCLES PER SCAN LINE.
  722.  
  723.                            +--------------------------+
  724.                            ▄ 8563 ═EMORY ╧RGANIZATION ▄
  725.                            +--------------------------+
  726.  
  727.   ╬ORMALLY, THE EXTRA MEMORY OF THE ├=128'S EQUIPPED WITH 64K GOES UNUSED (48K
  728. WORTH) UNLESS PROGRAMS LIKE ┬ASIC-8 ETC, TAKE ADVANTAGE OF IT. ╘HERE ARE VARIOUS
  729. MOD FILES DESCRIBING THE UPGRADE FROM 16K TO 64K AND IT IS _STRONGLY_ ADVISED
  730. (ALTHOUGH THE AUTHOR HAS NOT YET DONE SO) AND BE AWARE THAT ***╧╨┼╬╔╬╟ ┘╧╒╥
  731. ├╧═╨╒╘┼╥ ╩╒╙╘ ╘╧ ╠╧╧╦, ┘╧╒ ═┴┘ ═┼╙╙ ╔╘ ╒╨*** AND IT IS _STRONGLY_ ADVISED THAT 
  732. YOU CONTACT A PERSON EXPERIENCED WITH ELECTRONICS TO PERFORM THE UPGRADE FOR
  733. YOU.  ╬OTE ALSO THAT SOME MAIL ORDER COMPANIES ARE OFFERING AN "UP-GRADE BOARD"
  734. WHICH PLUGS INTO THE 8563 SLOT AND DOES NOT INVOLVE DISAUDERING THE ╥┴═ CHIPS.
  735.  
  736.   ╬OW, THE 8563 USES THE 16K OF MEMORY (IT IGNORES THE EXTRA 48K OF MEMORY WHEN
  737. IT'S GOT 64K, THUS THE FOLLOWING APPLIES ALSO TO THE 8563'S EQUIPPED WITH 64K
  738. OF MEMORY) AND NORMALLY, HAS THE FOLLOWING MEMORY MAP:
  739.  
  740.   $0000 - $07FF - ╙CREEN ═EMORY
  741.   $0800 - $0FFF - ┴TTRIBUTE ═EMORY
  742.   $1000 - $1FFF - ╒NUSED
  743.   $2000 - $2FFF - ╒PPER├ASE / ╟RAPHIC ├HARACTER ╙ET   (├HAR ╙ET #1)
  744.   $3000 - $3FFF - ╠OWER├ASE / ╒PPER├ASE ├HARACTER ╙ET (├HAR ╙ET #2)
  745.   
  746.                           +---------------------------+ 
  747.                           ▄ ╫RITING TO 8563 ╥EGISTERS ▄
  748.                           +---------------------------+ 
  749.  
  750.   ╬OW HOW DO WE WRITE TO THESE REGISTERS WE'VE LEARNED SO MUCH ABOUT? ╘HERE'S
  751. SEVERAL WAYS DEPENDING ON HOW LAZY YOU ARE.  ╘HE PURE-ML VERSION:
  752.  
  753. ╫╥╔╘╔╬╟ ╘╧ ┴ ╥┼╟╔╙╘┼╥:
  754.  
  755.    WRITEREG = * ; THIS ROUTINE WRITES .A TO REGISTER # .X, ┴SSSUMES ╔/╧ BLOCK IN
  756.          STX $D600
  757.        - LDX $D600
  758.          BPL -
  759.          STA $D601
  760.          RTS
  761.    
  762.   ALSO, IN BANK 15 THERE IS A SIMILAIR ROUTINE AT $CDCC. ├ALLING IT AT $CDCA
  763. LOADS .X WITH A VALUE OF 31 INDICATING THE DATA REGISTER WHICH IS OFTEN USEFUL.
  764.  
  765.   ╞ROM BASIC, JUST USE A ╙┘╙ 52684, VALUE, REGISTER#
  766.  
  767.  ╥┼┴─╔╬╟ ╞╥╧═ ┴ ╥┼╟╔╙╘┼╥:
  768.    
  769.    READREG = * ; THIS ROUTINE RETURNS THE CONTENTS OF REGISTER # .X IN .A
  770.                ; ┴SSUMES ╔/╧ BLOCK SWITCHED IN
  771.         STX $D600
  772.       - LDX $D600
  773.         BPL -
  774.         LDA $D601
  775.  
  776.    OR USE THE ROUTINE IN BANK 15 AT $CDDA.  ╞ROM BASIC, A ╙┘╙ 52698,,REGISTER#
  777. AND THEN A ╥╥┼╟ ┴ RETURNS THE VALUE IN VARIABLE ┴. 
  778.  
  779.                           +--------------------+
  780.                           ▄ ╞URTHER 8563 ╬OTES ▄
  781.                           +--------------------+ 
  782.  
  783.   ═ANY ├=128 OWNERS ARE STILL USING THEIR MONITORS THEY HAD WHEN THEY HAD THEIR
  784. ├=64'S AND ARE ABLE TO USE THE 80 COLUMN SCREEN THROUGH A "CONVERTER-CABLE"
  785. (BASICALLY TAKING PIN 7 OF THE ╥╟┬╔ PORT AND FEEDING IT AS RAW VIDEO).  ╘HERE
  786. IS ALSO A TEXT FILE OUT EXPLAINING HOW TO TAKE THE ╥,╟,┬,╔ PINS ON THAT PORT
  787. TO DISPLAY SHADES OF GRAY ON A MONOCHROME MONITOR (BASICALLY TYING RESISTORS
  788. WITH DIODES ACROSS EACH COLOR PIN AND THEN JOINING THEM).  ╘HERE IS RELIEF!! :-)
  789.  
  790.   ╘HE 8563 IS A CHIP FULL OF CABIBILITIES WAITING TO BE FOUND AND DEVELOPED. ╔'D
  791. BE INTERESTED IN SEEING ANY CODE / TECHNIQUES THAT READERS OF THIS NET-MAG HAVE
  792. FOUND.  ╟IVEN THAT ENOUGH ARE SUBMITTED, A POSSIBLE LISTING OF SOME OF THE 
  793. BETTER TRICKS AND TECHNIQUES MIGHT BE POSSIBLE IN THE FUTURE.
  794.  
  795. ===========================================================================
  796. ╞╔╠┼ ╙╨╠╔╘╘┼╥  - ═ARK ╠AWRENCE      9152427D@LEVELS.UNISA.EDU.AU
  797. =============
  798.  
  799. ╘HIS PROGRAM STEMMED FROM THE INABILITY OF ╪╠╔╬╦ TO TRANSFER ├╙-─╧╙ FROM MY PC
  800. TO MY 128.  ╪╠╔╬╦ TRANSFERS ABOUT 43╦ (╔ THINK), WHEREAS ├╙-─╧╙ WAS ABOUT 48╦.
  801.  
  802. ╥ATHER THAN DO THE WHOLE THING AT ONCE, WHY NOT CUT THE JOB UP INTO MORE
  803. SIZEABLE PIECES, TRANSFER THE PROGRAM PIECE BY PIECE, AND THEN REASSEMBLE THE
  804. PIECES AT THE OTHER END?
  805.  
  806. ┴ND SO EVENTUATED THE BIRTH OF ╙╨╠╔╘ :-)
  807.  
  808. ╙╨╠╔╘, WRITTEN ENTIRELY IN ╘URBO ╨ASCAL, ALLOWS YOU TO SPLIT ─╧╙ FILES INTO
  809. SMALLER PIECES - YOU CAN EITHER TELL IT A SIZE TO SPLIT THE FILES INTO, OR
  810. TELL IT A NUMBER OF FILES TO CREATE.  ┘OU THEN GIVE ╙╨╠╔╘ THE BASE FILENAME
  811. FOR THE NEW FILES ╫╔╘╚ ╬╧ ┼╪╘┼╬╙╔╧╬ - ╙╨╠╔╘ WILL GIVE THE NEW FILES THEIR OWN
  812. EXTENSIONS, AND ╙╨╠╔╘ WILL THEN CREATE THESE FILES TO YOUR LIKING.
  813.  
  814. ╩UST TRANSFER THE FOLLOWING PROGRAM TO ╘URBO, COMPILE IT, AND AWAY YOU GO!!!
  815.  
  816. ╚OPEFULLY, THE PROGRAM IS COMMENTED ENOUGH TO GIVE YOU A FAIR IDEA OF WHAT'S
  817. GOING ON - ALTHOUGH IT ISN'T AT ALL COMPLICATED TO UNDERSTAND.
  818.  
  819. ┴T SOME POINTS ╔ HAVE COMMENTS THAT SEEM THE LEAST IMPORTANT - ┼╬─ █ ├┴╙┼ ▌ -
  820. THEY ARE TO HELP ME WHEN ╔ PROGRAM...  ╔ FIND IT EASY TO LOSE TRACK OF WHICH
  821. ┼╬─ IS FOR WHAT, STUFF UP MY INDENTATION, LOST BITS AND PIECES, DELETE THE
  822. WRONG PARTS, ETC, ETC.
  823.  
  824. ╔ FOUND IT HELPED ME, SO IT MAY HELP OTHERS.
  825.  
  826. ╔F YOU NEED ANY FURTHER EXPLANATION, JUST LET ME KNOW :-)
  827.  
  828. ┴NOTHER INTERESTING THING ╔ DISCOVERED ABOUT ╪╠╔╬╦.  ╔T DOESN'T TRANSFER THE
  829. FILES TO THE CORRECT SIZE.  ╔ THINK (HAVEN'T HAD TIME TO SIT DOWN AND CHECK
  830. IT OUT YET) IT TRANSFERS TO THE NEAREST 256, 512 OR 1024 BYTE BOUNDARY.  ╔F
  831. YOUR FILE DOESN'T REACH THE BOUNDARY, IT WILL PAD THE REST OUT WITH ZEROES
  832. ╔ THINK.  ╙O, WHEN YOU GO TO REASSEMBLE THE FILE, IT'S GOT ALL THIS GARBAGE
  833. IN PLACES WHERE IT SHOULDN'T BE, AND THE THING WON'T WORK.
  834.  
  835. ╙O, WHEN ╙╨╠╔╘TING A FILE, SPECIFY THE SIZE TO A MULTIPLE OF ONE OF THESE
  836. BOUNDARIES.
  837.  
  838. ╘HEN, USING A M/C MONITOR, LOAD ALL THE PARTS IN TOGETHER.
  839.  
  840. ╔'LL TRY TO SET ASIDE A LITTLE TIME IN THE NOT TOO DISTANT FUTURE TO WRITE A
  841. M/C PROGRAM TO JOIN THE PARTS FOR YOU, SINCE IT CAN GET CONFUSING REASSEMBLING
  842. THE PARTS BY HAND, AND THE BUILT IN DOS COPY THAT COMMODORE SO KINDLY GRACED US
  843. WITH IS SO DARNED FAST <COUGH> <COUGH> :-)
  844.  
  845. [┼D. ╬OTE: ╫HILE THE DOS COPY COMMAND IS SLOW.... FOR THOSE OF YOU WHO ARE
  846.  IMPATIENT TRY USING SOMETHINE LIKE THE FOLLOWING TO JOIN FILES TOGATHER MAKING
  847.  SURE THAT THERE'S ENOUGH SPACE ON THE DISK:
  848.      OPEN15,8,15,"C0:NAME=NAME1,NAME2...": CLOSE15]
  849.  
  850.  
  851. ╙O, GOOD LUCK AND ENJOY!
  852.  
  853. ---------------------------------------------------------------------------
  854. ╨ROGRAM ╙PLIT (INPUT,OUTPUT);
  855.  
  856. ╒SES ─OS;
  857.   █ USES SPECIFIC FILE HANDLING ROUTINES ▌
  858. ╓AR
  859.    ╔N╞ILE,╧UTFILE                : ╞ILE OF ┬YTE;
  860.    ├OUNT,╬UMBER,╙IZE,╬EW╙IZE,
  861.    ╠AST,├OUNTER                  : ╠ONGINT;
  862.    ╔N╞ILE╬AME,╬EWFILE,╧UT╞ILE╬AME: ╙TRING;
  863.    ╙,╨                           : ╨ATH╙TR;
  864.    ─                             : ─IR╙TR;
  865.    ╬                             : ╬AME╙TR;
  866.    ┼                             : ┼XT╙TR;
  867.    ╙PLIT╘YPE,├HECK               : ├HAR;
  868.    ─ATA                          : ┬YTE;
  869.    ┼XTENSION                     : ╙TRING[3];
  870.  
  871. ┬EGIN
  872.    ╞OR COUNT := 1 TO 25 DO
  873.       ╫RITELN;
  874.       █ ─UMB WAY TO CLEAR THE SCREEN :-)  ▌
  875.  
  876.    ╫RITELN ('*********************************************************');
  877.    ╫RITELN ('*  ╞╔╠┼ ╙╨╠╔╘╘╔╬╟ ╒╘╔╠╔╘┘ ╓0.01 (├) 1992 ═┴╥╦ ╠┴╫╥┼╬├┼  *');
  878.    ╫RITELN ('*               (-: ═┴─┼ ╔╬ ┴╒╙╘╥┴╠╔┴ :-)               *');
  879.    ╫RITELN ('*********************************************************');
  880.    ╫RITELN;
  881.    ╫RITE   ('┼NTER ╞ILENAME (INCLUDING DRIVE AND PATH)    ');
  882.    ╥EAD╠N  (╔N╞ILE╬AME);
  883.    ╫RITELN;
  884.  
  885.    ╞OR COUNT := 1 TO LENGTH (╔N╞ILE╬AME) DO
  886.       ╔N╞ILE╬AME[COUNT] := ╒P├ASE ( ╔N╞ILE╬AME[COUNT] );
  887.       █ CHANGE FILENAME TO ALL UPPERCASE CHARACTERS ▌
  888.  
  889.    ╞╙PLIT(╔N╞ILE╬AME,D,N,E);
  890.       █ SPLIT FILENAME INTO IT'S RESPECTIVE PARTS:
  891.               D - ─IRECTORY
  892.               N - ╬AME
  893.               E - ┼XTENSION ▌
  894.  
  895.    ╙ := ╞╙EARCH(╔N╞ILE╬AME,╟ET┼NV(─));
  896.       █ SEARCH FOR FILE ╞╔╠┼╬┴═┼ IN DIRECTORY ─ ▌
  897.  
  898.    IF ╙ = '' THEN
  899.       WRITELN ('*┼╥╥╧╥*     ╞ILE "',╔N╞ILE╬AME,'" NOT FOUND.')
  900.       █ ╙ EQUALS '' (NOTHING) IF ╞╔╠┼╬┴═┼ DOESN'T EXIST ▌
  901.  
  902.    ┼LSE
  903.    ┬EGIN
  904.       ┴SSIGN  (╔NFILE,╔N╞ILE╬AME);
  905.       ╥ESET   (╔NFILE);
  906.       █ ╧PEN THE ╔NPUT ╞ILE ▌
  907.  
  908.       ╙IZE := ╞ILE╙IZE (╔N╞ILE);
  909.       █ ╟ET FILE SIZE ▌
  910.  
  911.       ╫RITELN ('╞ILE╬AME:     ',╔N╞ILE╬AME);
  912.       ╫RITELN ('╞ILE╙IZE:     ',╙IZE,' ┬YTES.');
  913.       ╫RITELN;
  914.       █ ╙HOW FILE INFO ▌
  915.  
  916.       ╫RITELN ('╔N WHICH WAY WOULD YOU LIKE THE FILE SPLIT?');
  917.       ╫RITELN ('     (A)  ╬UMBER OF ┬YTES.');
  918.       ╫RITELN ('     (B)  ╬UMBER OF ╞ILES.');
  919.       ╥EPEAT
  920.          ╫RITE ('┼NTER YOUR SELECTION    ');
  921.          ╥EADLN (╙PLIT╘YPE);
  922.          ╙PLIT╘YPE := ╒P├ASE(╙PLIT╘YPE);
  923.       ╒NTIL (╙PLIT╘YPE >= '┴') AND (╙PLIT╘YPE <= '┬');
  924.       █ LET USER CHOOSE WHICH WAY TO SPLIT FILE ▌
  925.  
  926.       ╫RITELN;
  927.       ├ASE ╙PLIT╘YPE OF
  928.          '┴': ┬EGIN
  929.             █ SPLIT BY NUMBER OF BYTES ▌
  930.             ╫RITE ('┼NTER BYTE SIZE OF NEW FILES    ');
  931.             ╥EADLN (╬EW╙IZE);
  932.             ╫RITELN;
  933.             ╔F (╬EW╙IZE > ╙IZE) THEN
  934.                ╫RITELN ('╚EY - ┼VEN ╔ CAN''T DO THAT!!!')
  935.             ┼LSE
  936.             BEGIN
  937.                ╬UMBER  := ╙IZE DIV ╬EW╙IZE;
  938.                ╠AST    := ╙IZE - ╬UMBER * ╬EW╙IZE;
  939.                ╬UMBER  := ╬UMBER + 1;
  940.                ╫RITE ('┼NTER ┬ASE ╞ILENAME (INCLUDING DRIVE AND PATH)    ');
  941.                ╥EADLN (╬EW╞ILE);
  942.                ╫RITELN;
  943.                ╫RITELN ('├REATING ',╬UMBER,' NEW FILES...');
  944.             ┼ND;
  945.          ┼ND; █ ┴ ▌
  946.  
  947.          '┬': ┬EGIN
  948.             █ ╙PLIT BY FILE SIZE ▌
  949.             ╫RITE ('┼NTER NUMBER OF NEW FILES: ');
  950.             ╥EADLN(╬UMBER);
  951.             ╫RITELN;
  952.             ╬EW╙IZE := ╙IZE DIV ╬UMBER + 1;
  953.             ╠AST    := ╙IZE - (╬UMBER - 1) * ╬EWSIZE;
  954.             ╬UMBER  := ╬UMBER;
  955.             ╫RITE ('┼NTER ┬ASE ╞ILENAME (INCLUDING DRIVE AND PATH)    ');
  956.             ╥EADLN (╬EW╞ILE);
  957.             ╫RITELN;
  958.             ╫RITELN ('├REATING ',╬UMBER,' NEW FILES...');
  959.          ┼ND; █ ┬ ▌
  960.       ┼ND;  █ ├ASE ▌
  961.  
  962.          ╫RITELN;
  963.  
  964.          ╞OR ├OUNT := 1 TO ╬UMBER DO
  965.          █ ╬╒═┬┼╥ NEW FILES WILL BE CREATED ▌
  966.  
  967.          ┬EGIN
  968.             ╔F ├OUNT = ╬UMBER THEN
  969.                ╬EW╙IZE := ╠AST;
  970.             █ ═ORE OFTEN THAN NOT, THE FILES WON'T DIVIDE EVENLY FROM THE
  971.               ORIGINAL.  ╙O, THE LAST FILE WILL BE SMALLER THAN THE REST.
  972.               ┬ECAUSE OF THIS, ╔ PREVIOUSLY CALCULATED THE SIZE OF THE FINAL
  973.               FILE, AND HERE CHECK IF WE'RE UP TO THE LAST PART YET - AND IF
  974.               WE ARE, ╔ SET THE SIZE OF THE LAST FILE ACCORDINGLY ▌
  975.  
  976.             ╙TR(├OUNT,┼XTENSION);
  977.             █ ═AKE ┼╪╘┼╬╙╔╧╬ A STRING REPRESENTATION OF ├╧╒╬╘, TO BE ADDED TO
  978.               THE ╧UT╞ILE╬AME TO MAKE THINGS A TAD EASIER ▌
  979.  
  980.             ╧UT╞ILE╬AME := ├ONCAT(╬EW╞ILE,'.',├OPY('00',1,3-╠ENGTH(┼XTENSION)),┼
  981.             █ ├REATE FILENAME BASED ON WHICH PART WE'RE UP TO ▌
  982.  
  983.             ┴SSIGN  (╧UT╞ILE,╧UT╞ILE╬AME);
  984.             ╥EWRITE (╧UTFILE);
  985.             █ ╧PEN EACH ╧UTPUT ╞ILE ▌
  986.  
  987.             ╫RITE   ('├REATING ',╧UT╞ILE╬AME,'... ');
  988.  
  989.             ╞OR ├OUNTER := 1 TO ╬EW╙IZE DO
  990.             █ ╫RITE TO EACH ╧UTPUT ╞ILE ▌
  991.  
  992.             ┬EGIN
  993.                ╥EAD  (╔NFILE,─ATA);
  994.                ╫RITE (╧UT╞ILE,─ATA);
  995.                █ ╘RANSFER DATA FROM INPUT FILE TO OUTPUT FILE ▌
  996.             ┼ND;
  997.  
  998.             ├LOSE   (╧UTFILE);
  999.             █ ├LOSE EACH ╧UTPUT ╞ILE ▌
  1000.             ╫RITELN ('─ONE!');
  1001.